package daisy;

import grafico.GerenteGUI;

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class EstruturaSMIL extends EstruturaBase 
{
	
	GerenteGUI gui = GerenteGUI.instancia(); 
	
	private List<RegPAR> lstRegPAR;

	public EstruturaSMIL()
	{
		setNomeArquivo(null);
		lstRegPAR = new ArrayList<RegPAR>();
	}

	public boolean abrir( RegBookRef smilRef )
	{
		setNomeArquivo(smilRef.getNome());

		if ( !parseFile(smilRef.getNome()) )
			return false;

		return montaListaPAR(smilRef);
	}

	public boolean abrir( String caminho, RegBookRef smilRef )
	{
		setNomeArquivo(caminho + smilRef.getNome());

		if ( !parseFile(caminho + smilRef.getNome()) )
			return false;

		return montaListaPAR(smilRef);
	}
	
	/*
	 * Estrutura do arquivo SMIL
	 * <smil>
	 *     <body>
	 *         <seq>
	 *             <par>
	 */
	private boolean montaListaPAR( RegBookRef smilRef )
	{
		RegPAR reg;
		Element elem;
		Element elemText;
		Element smilElem;
		NodeList lisFilhos;
		NodeList lisNodePar;
		
		// Elemento <smil>
		smilElem = dom.getDocumentElement();
		
		lisNodePar = smilElem.getElementsByTagName("par");
		
		// Arquivo invÃ¡lido, sem itemref e sem spine
		if ( lisNodePar == null || lisNodePar.getLength() <= 0 )
		{
			gui.dlgAlerta("Arquivo invÃ¡lido, sem tag <par>!");
			return false;
		}
	
		for( int i = 0 ; i < lisNodePar.getLength(); i++ ) 
		{
			elem = (Element)lisNodePar.item(i);
			
			reg = new RegPAR(smilRef);

			lisFilhos = elem.getElementsByTagName("text");
			if ( lisFilhos != null && lisFilhos.getLength() > 0 ) 
			{
				elemText = (Element)lisFilhos.item(0);
				reg.setTexto(elemText.getAttribute("src"));
			}

			lisFilhos = elem.getElementsByTagName("audio");
			if ( lisFilhos != null && lisFilhos.getLength() > 0 ) 
			{
				reg.setAudio( extraiRegAudio( (Element)lisFilhos.item(0) ) );
			}
			
			if ( reg.getTexto() == null && reg.getAudio() == null )
			{
				gui.dlgAlerta("Arquivo invÃ¡lido, <par> sem audio e sem texto!");
				return false;
			}
			lstRegPAR.add(reg);
		}
		
		return true;
	}
	
	public List<RegPAR> getLstRegPAR()		 { return lstRegPAR;	}
	public void setLstRegPAR(List<RegPAR> l) { lstRegPAR = l;		}
}
